// pages/index/index.js
// 首席研发团队最终审查版 v2 (补全所有函数)

const CryptoJS = require('../../utils/crypto-js.js');
const app = getApp(); // 获取App实例以便调用全局网络请求函数

// 【建议】将Key和服务器地址放入统一的配置文件中
const X_AUTH_KEY = '50871805b4160a5f51b44b235e4f3c8eda33cebcb03f985544db72f3a1dac6ba';
const API_BASE_URL = 'https://iw6i1vjj93ml.guyubao.com'; // 您的公网隧道或线上域名

Page({
  data: {
    url: '',
    isParsing: false, // 新增状态，防止重复点击
  },

  onUrlInput(e) {
    this.setData({
      url: e.detail.value.trim()
    });
  },

  /**
   * 核心功能：点击“立即解析”按钮
   */
  async parseVideo() {
    if (this.data.isParsing) return; // 防止重复提交
    if (!this.data.url) {
      wx.showToast({ title: '请输入视频链接', icon: 'none' });
      return;
    }
    
    this.setData({ isParsing: true });
    wx.showLoading({ title: '准备安全通道...', mask: true });

    try {
      // 步骤1: 确保用户已登录 (通过app.js的静默登录)
      const token = wx.getStorageSync('token');
      if (!token) {
        wx.showToast({ title: '请先在“我的”页面登录', icon: 'none' });
        // 可选：跳转到“我的”页面引导登录
        // wx.switchTab({ url: '/pages/profile/profile' });
        return; // 中断操作
      }

      // 步骤2: 获取一次性加密票据
      const ticketRes = await app.wxRequestPromise({
        baseURL: API_BASE_URL,
        url: '/api/wechat/encrypt_ticket',
        method: 'GET',
        header: { 'Authorization': 'Bearer ' + token }
      });
      if (ticketRes.code !== 200 || !ticketRes.data.ticket) {
        throw new Error('获取加密票据失败');
      }
      const ticket = ticketRes.data.ticket;
      wx.showLoading({ title: '正在加密数据...', mask: true });

      // 步骤3: 加密请求数据
      const rawInput = this.data.url;
      const urlRegex = /(https?:\/\/[^\s]+)/; 
      const match = rawInput.match(urlRegex);

      if (!match) {
        throw new Error('未在输入内容中找到有效链接');
      }
      const cleanUrl = match[0];
      console.log('提取到的有效URL (Extracted URL):', cleanUrl);

      const dataToEncrypt = JSON.stringify({ url: cleanUrl });
      const messageWordArray = CryptoJS.enc.Utf8.parse(dataToEncrypt);
      const ivWordArray = this.generateFixedLengthIv();
      const keyWordArray = CryptoJS.SHA256(ticket);
      const encrypted = CryptoJS.AES.encrypt(messageWordArray, keyWordArray, {
        iv: ivWordArray,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
      });
      const encryptedBase64 = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
      const ivBase64 = encrypted.iv.toString(CryptoJS.enc.Base64);
      
      // 步骤4: 调用最终的解析接口
      wx.showLoading({ title: '正在解析...', mask: true });
      const finalRes = await app.wxRequestPromise({
        baseURL: API_BASE_URL,
        url: '/api/wechat/parse_video',
        method: 'POST',
        header: {
          'Authorization': 'Bearer ' + token,
          'X-Ticket': ticket,
          'X-Auth-Key': X_AUTH_KEY
        },
        data: {
          data: encryptedBase64,
          iv: ivBase64
        }
      });
      
      if (finalRes && finalRes.code === 200) {
        // 步骤5: 成功后跳转到结果页
        wx.navigateTo({
          url: `/pages/result/result?data=${encodeURIComponent(JSON.stringify(finalRes.data))}`
        });
      } else {
        throw new Error(finalRes.message || '解析失败');
      }
    } catch (error) {
      wx.showToast({ title: error.message || '操作失败', icon: 'none', duration: 2500 });
    } finally {
      this.setData({ isParsing: false });
      wx.hideLoading();
    }
  },

  // 100%精确生成16字节(128位)IV的函数
  generateFixedLengthIv() {
    const hexChars = '0123456789abcdef';
    let hexStr = '';
    for (let i = 0; i < 32; i++) {
      hexStr += hexChars.charAt(Math.floor(Math.random() * hexChars.length));
    }
    return CryptoJS.enc.Hex.parse(hexStr);
  },

  // ======================================================
  // 【核心修正】补全页面绑定的辅助函数
  // ======================================================
  
  /**
   * 点击"体验示例"
   */
  loadExample() {
    this.setData({
      url: '  1.51 mQk:/ j@c.nD 08/07 比亚迪到底是不是下一个恒大？我的3.6个亿是怎么没的？ # 邹先华 # 比亚迪 # 恒大 # 商业案例 # 汽车  https://v.douyin.com/HfCV4j2iu-U/ 复制此链接，打开Dou音搜索，直接观看视频！' // 这是一个示例链接
    });
    wx.showToast({
      title: '示例链接已填充',
      icon: 'none'
    });
  },

  /**
   * 点击"如何使用?"
   */
  showHelp() {
    wx.showModal({
      title: '如何使用',
      content: '请前往支持的视频平台，点击“分享”按钮，然后选择“复制链接”，将链接粘贴到输入框内即可。',
      showCancel: false, // 只显示确定按钮
      confirmText: '我明白了',
      confirmColor: '#1A73E8' // 确认按钮颜色
    });
  },
});